package com.micro.balance;

import java.util.ArrayList;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Component;

/**
 * 轮询算法
 */
@Component("roundbin")
public class RoundbinLoadBalance extends AbstractLoadBalance{
	private static int pos=0;//当前位置
	
    /**
     * 执行负载均衡选择的逻辑
     * 使用轮询算法从服务器列表中选择一个服务器
     *
     * @param map 一个映射，键为服务器标识，值为服务器的权重
     * @return 返回选中的服务器标识
     */
    @Override
    protected String doSelect(Map<String,Integer> map){
    	// 创建一个列表，用于存储服务器标识
    	ArrayList<String> lists = new ArrayList<String>();
    	// 获取服务器标识的集合
	    Set<String> sets = map.keySet();
	    // 将服务器标识添加到列表中
	    lists.addAll(sets);

    	// 初始化结果变量
    	String result="";
    	// 同步代码块，确保并发安全
    	synchronized (RoundbinLoadBalance.class) {
			// 如果当前位置超过列表大小，重置位置到起始点
			if ( pos >= lists.size() ){
				pos = 0;
			}
			// 获取当前位置的服务器标识作为结果
			result = lists.get(pos);
			// 位置递增，以实现轮询
			pos++;
		}

        // 返回选中的服务器标识
        return result;
    }

}
